package com.jinglin.web.component;

import com.jinglin.component.RedisComponent;
import com.jinglin.entity.constants.Constants;
import com.jinglin.redis.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
@Slf4j
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    @Resource
    private RedisUtils redisUtils;

    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    // 这个监听器会监听redis过期的key。
    @Override
    public void onMessage(Message message, byte[] pattern) {
        // message就是已经过期的key。
        String key = message.toString();
        // 过滤一下
        if (!key.startsWith(Constants.REDIS_KEY_VIDEO_PLAY_COUNT_ONLINE_PREIFX + Constants.REDIS_KEY_VIDEO_PLAY_COUNT_USER_PREFIX)) {
            return;
        }
        //监听 在线用户过期的key
        // 从key中提取fileId。减少视频的在线播放人数。
        Integer userKeyIndex =Constants.REDIS_KEY_VIDEO_PLAY_COUNT_USER_PREFIX.length();
         // 取userKeyIndex往后的20个字符。
        String fileId = key.substring(userKeyIndex, userKeyIndex + Constants.LENGTH_20);
        redisUtils.decrement(String.format(Constants.REDIS_KEY_VIDEO_PLAY_COUNT_ONLINE, fileId));
    }
}
